        /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.clinicariobamba.ReglasNegocio.Funciones;

import com.clinicariobamba.Accesodatos.Conexion;
import com.clinicariobamba.ReglasNegocio.Clases.Paciente;
import com.clinicariobamba.ReglasNegocio.Clases.ProfesionalSalud;
import com.clinicariobamba.ReglasNegocio.Clases.Usuario;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 *
 * @author xavier
 */
public class FuncionesUsuario {

    public static ProfesionalSalud login(ProfesionalSalud pf) {
        //ProfesionalSalud model = findByUsuario(pf);
        ProfesionalSalud model = FuncionesProfesionalSalud.obtenerProfesionalSalud(pf.getCi());
        if (model != null) {
            if (!pf.getContrasena().equals(model.getContrasena())) {
                model = null;
            }
        }
        return model;
    }

    public static Paciente login(Paciente p) {
        Paciente model = FuncionesPaciente.obtenerPacienteCI(p.getCi());
        if (model != null) {
            if (!p.getContrasena().equals(model.getContrasena())) {
                model = null;
            }
        }
        return model;
    }

    public static Usuario login(Usuario usuario) {
        Usuario model = obtenerUsuarioId(usuario.getIdUsuario().toLowerCase());
        if (model != null) {
            if (!usuario.getContrasena().equals(model.getContrasena())) {
                model = null;
            }
        }
        return model;
    }

    public static ArrayList<Usuario> obtenerUsuarios() {
        try {
            Conexion con = new Conexion();
            ArrayList<Usuario> list = new ArrayList();

            try {
                String sql = "select * from usuario";
                ResultSet rs = con.ejecutarQuery(sql);

                while (rs.next()) {
                    list.add(new Usuario(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4)));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos de Usuarios", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return list;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new ArrayList();
        }

    }

    public static Usuario obtenerUsuarioId(String id) {
        try {
            Conexion con = new Conexion();
            Usuario user = new Usuario();

            try {
                String sql = "select * from usuario where id_usuario = '" + id + "'";
                ResultSet rs = con.ejecutarQuery(sql);               
                while (rs.next()) {
                    user.setIdUsuario(rs.getString(1));
                    user.setNombres(rs.getString(2));
                    user.setApellidos(rs.getString(3));
                    user.setContrasena(rs.getString(4));
                }
            } catch (Exception e) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Error de consulta de datos del Usuario", e.getMessage());
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
            con.desconectar();
            return user;
        } catch (Exception ex) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error en la conexion a la base de datos", ex.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            return new Usuario();
        }

    }

    public static boolean insertar(Usuario user) throws Exception {
        boolean resultado;
        resultado = false;
        try {
            String sql = String.format("SELECT `clinica riobamba`.`insertar_usuario`('%s', '%s', '%s', '%s')", user.getIdUsuario(), user.getNombres(), user.getApellidos(), user.getContrasena());
            Conexion c = new Conexion();
            ResultSet rs = c.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            c.desconectar();
        } catch (Exception ex) {
            throw ex;

        }
        return resultado;
    }

    public static boolean modificar(Usuario user) throws Exception {
        boolean resultado;
        resultado = false;
        try {
            String sql = String.format("SELECT `clinica riobamba`.`actualizar_usuario`('%s', '%s', '%s', '%s')", user.getIdUsuario(), user.getNombres(), user.getApellidos(), user.getContrasena());
            Conexion c = new Conexion();
            ResultSet rs = c.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            c.desconectar();
        } catch (Exception ex) {
            throw ex;

        }
        return resultado;
    }

    public static boolean eliminar(Usuario user) throws Exception {
        boolean resultado;
        resultado = false;
        try {
            String sql = String.format("SELECT `clinica riobamba`.`eliminar_usuario`('%s')", user.getIdUsuario());
            Conexion c = new Conexion();
            ResultSet rs = c.ejecutarQuery(sql);
            rs.next();
            resultado = rs.getBoolean(1);
            c.desconectar();
        } catch (Exception ex) {
            throw ex;

        }
        return resultado;
    }
}
